
Implementacja poszczególnych etapów analizy odbywa się z wykorzystaniem pakietu języka R pod nazwą \emph{RecommenderLab}. Pakiet ten udostępnia wszystkie narzędzia potrzebne do analizy danych oraz implementacji kroków, które pomogą ustalić jakość rekomendacji generowanych przez wzięte pod uwagę w założeniach algorytmy i techniki. 

\section{Analiza zbioru danych}

Po załadowaniu pakietu do pamięci jest ładowany również obiekt \emph{ratingMatrix} zawierający wiersze odpowiadające użytkownikom i kolumny odpowiadające filmom. Obiekt ten może odpowiadać wybranemu zbiorowi danych. Można go przekształcić na macierz rzadką. 

\subsection{Liczba osób oceniających dany film}

\begin{figure}[htb]
\begin{center}
\includegraphics[width=450px]{rowCounts}
\caption{Liczba oceniających osób dla danego filmu.}
\label{rowCounts}
\end{center}
\end{figure}

Wykorzystujemy funkcję \emph{rowCounts(1)}. Pierwszą informacją, którą można wyczytać z histogramu [\ref{rowCounts}] jest to że jak niewiele wartości jest większych niż 500:

\begin{verbatim}
>sum(rowc>500)
5
>sum(rowc>600)
3
\end{verbatim}

Ujawnienie wartości odstających pociąga za sobą decyzję co do wyboru mediany jako miary położenia:

\begin{verbatim}
>median(rowc)
64
\end{verbatim}

Jako miara rozproszenia zostanie użyte średnie odchylenie bezwzględne: 

\begin{verbatim}
>mad(rowc)
59.304
\end{verbatim}

\subsection{Liczba ocenianych filmów przez użytkownika}

Wykorzystując funkcję języka R \emph{colCounts(1)} dochodzimy do podobnych wniosków [\ref{colCounts}] co przy analizie liczby osób oceniających dany film. Otrzymujemy następujące wartości dla mediany i średniego odchylenia bezwzględnego:

\begin{verbatim}
>median(colc)
27
>mad(colc)
35.5824
\end{verbatim}

\begin{figure}[htb]
\begin{center}
\includegraphics[width=450px]{colCounts}
\caption{Liczba ocenianych filmów przez użytkownika.}
\label{colCounts}
\end{center}
\end{figure}

\subsection{Średnie oceny nadawane przez użytkowników}

Kolejnym krokiem analizy danych jest zwrócenie uwagi na jakość zbioru danych pod względem częstości nadawania przez użytkowników konkretnych ocen. Histogram [\ref{rowMeans}] uzyskany w wyniku wykonania funkcji języka R \emph{rowMeans(1)} pozwala stwierdzić, że większość ocen jest większa od średniej oceny \(2,5\). Jeśli użytkownik podejmuje decyzję o wystawieniu oceny to jest to w większości przypadków ocena powyżej przeciętnej. Można wnioskować, że użytkownicy poświęcają więcej czasu na ocenianie filmów, które im przypadły do gusty, niż wystawianie niskich ocen filmom, które im się nie spodobały. 

W celu utworzenia użytecznej rekomendacji, która będzie zawierała bogatszą listę tytułów (nawet dla użytkowników, którzy wystawiają wyłącznie zawyżone oceny) bieżemy pod uwagę potrzebę normalizacji. Przewidujemy wykorzystanie \emph{standardowej} normalizacji polegającej na odcięciu od każdej oceny użytkownika wartości średniej jego ocen oraz dodatkowo opcji \emph{Z-score}, która ujednolica również wariancję.

\begin{figure}[htb]
\begin{center}
\includegraphics[width=450px]{rowMeans}
\caption{Średnie oceny nadawane przez użytkowników.}
\label{rowMeans}
\end{center}
\end{figure}

\section{Modele algorytmów rekomendujących}

Niniejszy rozdział przedstawia wyniki działania wybranych algorytmów rekomendacji dla wybranych parametrów wejściowych. Testy implementowane były przy pomocy skryptów języka R. 

\begin{table}
\caption{Wyniki działania algorytmów.}
\label{tab:Results}
\begin{tabular} { | l || l | l | l | l | }
\hline
Algorytm & MAE & MSE & RMSE & czas [s] \\ \hline
IBCF1 & 0.8860191 & 1.459378 & 1.208047 & 76.9 \\
IBCF2 & 0.8817064 & 1.437438 & 1.198932 & 75.58 \\
IBCF3 & 0.8664937 & 1.440576 & 1.200240 & 58.56 \\
IBCF4 & 0.8539493 & 1.404241 & 1.185007 & 63.92 \\ 
IBCF5 & 0.8860191 & 1.459378  & 1.208047 & 73.36 \\
IBCF6 & 0.8664937 & 1.440576  & 1.200240 & 76.98 \\ \hline
POP1 & 3.537850 & 13.64645 & 3.694110 & 0.08 \\
POP2 & 3.538137 & 13.64553 & 3.693986 & 0.14 \\
RANDOM1 & 1.7009351 & 4.3194531 & 2.0783294 & 0.164 \\
RANDOM2 & 1.6883046 & 4.2779008 & 2.0683087 & 0.291 \\
RANDOM3 & 1.7269404 & 4.4514276 & 2.1098407 & 0.428 \\ \hline
SVD1 & 3.5326736 & 13.6011128 & 3.6879686 & 16.212 \\
SVD2 & 3.5328552 & 13.6037529 & 3.6883266 & 15.852 \\
SVD3 & 3.5326736 & 13.6011128 & 3.6879686 & 15.790 \\
SVD4 & 3.5328552 & 13.6037529 & 3.6883266 & 15.842 \\
SVD5 & 3.5331555 & 13.6064722 & 3.6886952 & 15.938 \\
SVD6 & 3.5339415 & 13.6130110 & 3.6895814 & 15.947 \\
SVD7 & 3.5331555 & 13.6064722 & 3.6886952 & 16.157 \\
SVD8 & 3.5339415 & 13.6130110 & 3.6895814 & 15.910 \\
SVD9 & 3.5326736 & 13.6011128 & 3.6879686 & 15.761 \\
SVD10 & 3.5328552 & 13.6037529 & 3.6883266 & 15.608 \\
SVD11 & 3.5326736 & 13.6011128 & 3.6879686 & 15.607 \\
SVD12 & 3.5328552 & 13.6037529 & 3.6883266 & 15.791 \\ \hline
UBCF1 & 0.6877880 & 0.7557588 & 0.8693439 & 4.459 \\
UBCF2 & 0.6929628 & 0.7992060 & 0.8939832 & 236.585 \\
UBCF3 & 0.7406646 & 0.8770970 & 0.9365346 & 4.322 \\
UBCF4 & 0.6973428 & 0.8146508 & 0.9025801 & 235.964 \\
UBCF5 & 0.6862055 & 0.7569677 & 0.8700389 & 4.575 \\
UBCF6 & 0.6871220 & 0.7853883 & 0.8862214 & 236.818 \\
UBCF7 & 0.7395867 & 0.8773292 & 0.9366585 & 4.346 \\
UBCF8 & 0.6897406 & 0.8044316 & 0.8969011 & 236.473 \\ 
\hline
\end{tabular}
\end{table}

\begin{table}
\caption{Parametry wejściowe algorytmów.}
\label{tab:Results}
\begin{tabular} { | l || l | l | l | l | l | l |}
\hline
Algorytm & zbiór trenujący & podobieństwo & normalizacja & k & nn & aggr \\ \hline
IBCF1 & 0.9 & cosine & center & - & 30 & - \\
IBCF2 & 0.9 & cosine & Z-score & - & 30 & - \\
IBCF3 & 0.9 & cosine & center & - & 10 & - \\
IBCF4 & 0.9 & cosine & Z-score & - & 10 & - \\
IBCF5 & 0.9 & cosine & - & 10 & - & - \\
IBCF6 & 0.9 & cosine & - & 30 & - & - \\ \hline
POP1 & 0.9 & - & - & - & - & colSums \\
POP2 & 0.9 & - & - & - & - & colMeans \\ \hline
RANDOM1 & 0.9 & - & - & - & - & - \\
RANDOM2 & 0.8 & - & - & - & - & - \\
RANDOM3 & 0.7 & - & - & - & - & - \\ \hline
SVD1 & 0.9 & cosine & center & 50 & - & - \\
SVD2 & 0.9 & cosine & Z-score & 50 & - & - \\
SVD3 & 0.9 & pearson & center & 50 & - & - \\
SVD4 & 0.9 & pearson & Z-score & 50 & - & - \\
SVD5 & 0.9 & cosine & center & 100 & - & - \\
SVD6 & 0.9 & cosine & Z-score & 100 & - & - \\
SVD7 & 0.9 & pearson & center & 100 & - & - \\
SVD8 & 0.9 & pearson & Z-score & 100 & - & - \\
SVD9 & 0.9 & cosine & center & 50 & - & - \\
SVD10 & 0.9 & cosine & Z-score & 50 & - & - \\
SVD11 & 0.9 & pearson & center & 50 & - & - \\
SVD12 & 0.9 & pearson & Z-score & 50 & - & - \\ \hline
UBCF1 & 0.9 & cosine & center & - & 10 & - \\
UBCF2 & 0.9 & pearson & center & - & 10 & - \\
UBCF3 & 0.9 & cosine & center & - & 25 & - \\
UBCF4 & 0.9 & pearson & center & - & 25 & - \\
UBCF5 & 0.9 & cosine & Z-score & - & 10 & - \\
UBCF6 & 0.9 & pearson & Z-score & - & 10 & - \\
UBCF7 & 0.9 & cosine & Z-score & - & 25 & - \\
UBCF8 & 0.9 & pearson & Z-score & - & 25 & - \\
\hline
\end{tabular}
\end{table}


